package com.kenliang.javase.lambda;

import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.function.Supplier;

/**
 * @author KenLiang
 * @description:
 * @date Created in 11:00 AM 2019/8/15.
 */
@Slf4j
public class LocalVariable {

    public static void main(String[] args) {

    }


//    lambda expressions close over values, not variables   对值封闭，对变量开放
//    public Supplier<Integer> incrementer(int start) {
////        可以使用但是不能改变  (有效只读)
////        （原因）因为闭包返回的是个函数，所以当匿名内部类使用局部变量时，是copy了一份
//        return () -> start++;
//    }


    public void increment(){
        int start=0;
        List<Integer> list = new ArrayList<>();
        list.forEach((x)->{
            System.out.println(x+start);
        });

    }
//
//    public void localVariableMultithreading() {
//        boolean run = true;
//        ExecutorService executorService = Executors.newFixedThreadPool(5);
//        executorService.execute(() -> {
//            while (run) {
//                // do operation
//            }
//        });
////       有效只读（effectively final），lambda引用的局部变量不允许有改变
////      （原因）内部类启动了一个线程，run变量存在内存可见性问题，
//        run = false;
//    }
}
